In st_focus_manager_stage_event() we get the current key-focus actor from
the stage, and then enter a loop where we iterate through parents until we
get to the stage. If the key-focus actor is not a descendent of the stage
for some reason, this loop will never exit and we've locked up.
We can easily prevent the endless loop by checking for NULL as the exit
condition instead of checking for the stage, so do that instead.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3220>
if (!focused)
return FALSE;
- for (group = focused; group != stage; group = clutter_actor_get_parent (group))
+ for (group = focused; group != NULL; group = clutter_actor_get_parent (group))
{
if (g_hash_table_lookup (manager->groups, group))
{